home *** CD-ROM | disk | FTP | other *** search
- //
- // Usage:
- // IncrPattern baseAddr size initialPattern increment
-
- #include <Types.h>
- #include <StdIO.h>
- #include <Memory.h>
-
-
- #define numArgs 5 /* Number of arguments for write command. */
-
- typedef struct
- {
- void *bankAddress ; // Input
- Size bankSize ; // Input
- long seedPattern ; // Input
- long patternIncrement ; // Input
- void **failedAddress ; // Output
- long *failedBits ; // Output
- long *failedOffset ; // Output
- long *actualData ; // Output
- long *expectedData ; // Output
- } RAMIncrPatternPrivArgs ;
-
- long RAMIncrPattern(RAMIncrPatternPrivArgs *args) ;
-
-
-
- typedef unsigned long ulong ;
- typedef ulong ULONG ;
-
- //
- // Main()
- //
- unsigned main(ulong argC, char *argV[])
- {
- enum
- {
- kCommandArg,
- kBaseAddrArg,
- kSizeArg,
- kInitialPatternArg,
- kIncrementArg
- } ;
- ulong status = noErr;
- RAMIncrPatternPrivArgs args ;
- long err ;
-
- if (argC == numArgs)
- {
- long *baseAddress ;
- Size size ;
- long initialPattern ;
- long increment ;
-
- long *failedAddress ;
- long failedBits ;
- long failedOffset ;
- long actualData ;
- long expectedData ;
-
- sscanf(argV[kBaseAddrArg],"%i", &baseAddress) ;
- sscanf(argV[kSizeArg],"%i", &size) ;
- sscanf(argV[kInitialPatternArg],"%i", &initialPattern) ;
- sscanf(argV[kIncrementArg],"%i", &increment) ;
-
- args.bankAddress = baseAddress ;
- args.bankSize = size ;
- args.seedPattern = initialPattern ;
- args.patternIncrement = increment ;
-
- args.failedAddress = &failedAddress ;
- args.failedBits = &failedBits ;
- args.failedOffset = &failedOffset ;
- args.actualData = &actualData ;
- args.expectedData = &expectedData ;
-
- err = RAMIncrPattern(&args) ;
-
- if(err)
- {
- fprintf(stdout, "# Failed\n") ;
- fprintf(stdout, "# bankAddress = $%08X (%d)\n",
- args.bankAddress, args.bankAddress) ;
- fprintf(stdout, "# bankSize = $%08X (%d)\n",
- args.bankSize, args.bankSize) ;
- fprintf(stdout, "# seedPattern = $%08X (%d)\n",
- args.seedPattern, args.seedPattern) ;
- fprintf(stdout, "# patternIncrement = $%08X (%d)\n",
- args.patternIncrement, args.patternIncrement) ;
-
- fprintf(stdout, "# failedAddress = $%08X (%d)\n",
- failedAddress, failedAddress) ;
- fprintf(stdout, "# failedOffset = $%08X (%d)\n",
- failedOffset, failedOffset) ;
- fprintf(stdout, "# actualData = $%08X (%d)\n",
- actualData, actualData) ;
- fprintf(stdout, "# expectedData = $%08X (%d)\n",
- expectedData, expectedData) ;
- }else{
- fprintf(stdout, "# Passed\n") ;
- }
-
- }else
- status++;
-
- if (status != noErr)
- fprintf(stdout,"# Usage %s - baseAddr size initialPattern increment.\n", argV[kCommandArg]);
-
- return(status);
- }
-
-
- //
- // RAMIncrPattern()
- //
- long RAMIncrPattern(RAMIncrPatternPrivArgs *args)
- {
- ULONG *longPtr ;
- ULONG offset ;
- ULONG failedBits ;
- ULONG actualData ;
- ULONG expectedData ;
- ULONG pattern ;
-
- enum
- {
- noError = 0,
- errMemoryISFSuiteFailedVerify = 1
- } ;
-
- // Write the incrementing pattern.
- pattern = args->seedPattern ;
- longPtr = args->bankAddress ;
- for(offset = 0; offset < args->bankSize ; offset += sizeof(ULONG))
- {
- // Write the pattern.
- *longPtr++ = pattern ;
-
- // Next pattern.
- pattern += args->patternIncrement;
- }
-
- // Verify the incrementing pattern.
- pattern = args->seedPattern ;
- longPtr = args->bankAddress ;
- for(offset = 0; offset < args->bankSize ; offset += sizeof(ULONG))
- {
- // Verify the pattern.
- actualData = *longPtr++ ;
- expectedData = pattern ;
- failedBits = actualData ^ pattern ;
- if(0 != failedBits)
- {
- *(args->failedAddress) = longPtr ;
- *(args->failedBits) = failedBits ;
- *(args->failedOffset) = offset ;
- *(args->actualData) = actualData ;
- *(args->expectedData) = expectedData ;
-
- return(errMemoryISFSuiteFailedVerify) ;
- }
-
- // Next pattern.
- pattern += args->patternIncrement;
- }
-
- // All is well.
- *(args->failedAddress) = NULL ;
- *(args->failedBits) = NULL ;
- *(args->failedOffset) = NULL ;
- *(args->actualData) = NULL ;
- *(args->expectedData) = NULL ;
-
- return(noError) ;
- }
-